﻿namespace _代理模式
{
    internal class Program
    {
        static void Main(string[] args)
        {
            //    SchoolGril jiaojiao = new SchoolGril();
            //    jiaojiao.Name = "李娇娇";
            //    Proxy daili = new Proxy(jiaojiao);
            //    daili.GiveDolls();
            //    daili.GiveFlowers();
            //    daili.GiveChocolate();

            Proxy proxy=new Proxy();
            proxy.Request();
        }
    }
    //interface IGiveGift
    //{
    //    void GiveDolls();
    //    void GiveFlowers();
    //    void GiveChocolate();
    //}
    //class SchoolGril
    //{
    //    private string name;

    //    public string Name
    //    {
    //        get { return name; }
    //        set { name = value; }
    //    }

    //}
    ///// <summary>
    ///// 追求者
    ///// </summary>
    //class Pursuit : IGiveGift
    //{
    //    SchoolGril mm;
    //    public Pursuit(SchoolGril mm)
    //    {
    //        this.mm = mm;
    //    }
    //    public void GiveDolls()
    //    {
    //        Console.WriteLine(mm.Name + "送你Dolls");
    //    }

    //    public void GiveFlowers()
    //    {
    //        Console.WriteLine(mm.Name + "送你Flowers");
    //    }
    //    public void GiveChocolate()
    //    {
    //        Console.WriteLine(mm.Name + "送你hocolate");
    //    }

    //}
    ///// <summary>
    ///// 代理者
    ///// </summary>
    //class Proxy : IGiveGift
    //{
    //    Pursuit gg;
    //    public Proxy(SchoolGril mm)
    //    {
    //        gg = new Pursuit(mm);
    //    }
    //    public void GiveChocolate()
    //    {
    //        gg.GiveChocolate();
    //    }

    //    public void GiveDolls()
    //    {
    //        gg.GiveDolls();
    //    }

    //    public void GiveFlowers()
    //    {
    //        gg.GiveFlowers();
    //    }
    //}


    abstract class Subject
    {
        public abstract void Request();
    }

    class RealSubject : Subject
    {
        public override void Request()
        {
            Console.WriteLine("真是的请求");
        }
    }
    class Proxy : Subject
    {
        RealSubject realSubject;
        public override void Request()
        {
            if (realSubject == null)
            {
                realSubject = new RealSubject();
            }
            realSubject.Request();
        }
    }

}
